﻿/*

The MIT License

Copyright (c) 2010 Cartesian Analytics, Inc. 

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

*/

using System;
using System.Linq;

namespace Pipra.Uom
{
    internal static class NameConstants
    {

        internal const string NameLength = "length";
        internal const string NameArea = "area";
        internal const string NameVolume = "volume";
        internal const string NameTime = "time";
        internal const string NameMass = "mass";
        internal const string NameAngle = "angle";
        internal const string NameScale = "scale";
        internal const string NameTemperature = "temperature";

        internal const string DimensionSquarePrefixSpace = "square ";
        internal const string DimensionCubedPrefixSpace = "cubic ";

        internal const string NameAu = "astronomical unit";

        internal const string NameFoot = "foot";
        internal const string NameInch = "inch";
        internal const string NameYard = "yard";
        internal const string NameMile = "mile";
        internal const string NameRod = "rod";
        internal const string NameFurlong = "furlong";
        internal const string NameChain = "chain";
        internal const string NameLink = "link";
        internal const string NameSurveyFoot = "US survey foot";
        internal const string NameStatuteMile = "Statute mile";
        internal const string NameMetre = "metre";
        internal const string NameNauticalMile = "nautical mile";
        internal const string NameParsec = "parsec";
        internal const string NameLightyear = "light-year";

        internal static readonly string NameSquareMetre = String.Concat(DimensionSquarePrefixSpace, NameMetre);
        internal const string NameSurveyAcre = "US survey acre";
        internal const string NameAcre = "acre";
        internal static readonly string NameSquareSurveyFoot = String.Concat(DimensionSquarePrefixSpace, NameSurveyFoot);
        internal static readonly string NameSquareFoot = String.Concat(DimensionSquarePrefixSpace, NameFoot);

        internal static readonly string NameCubicMetre = String.Concat(DimensionCubedPrefixSpace, NameMetre);
        internal const string NameLitre = "litre";

        internal const string NameSecond = "second";

        internal const string NameGrain = "grain";
        internal const string NameDram = "dram";
        internal const string NameOunce = "ounce";
        internal const string NamePound = "pound";
        internal const string NameShortHundredweight = "US hundredweight";
        internal const string NameShortTon = "short ton";
        internal const string NameLongHundredweight = "long hundredweight";
        internal const string NameLongTon = "long ton";
        internal const string NamePennyweight = "pennyweight";
        internal const string NameTroyOunce = "troy ounce";
        internal const string NameTroyPount = "troy pound";
        internal const string NameGram = "gram";
        internal const string NameTonne = "tonne";

        internal const string NameRev = "revolution";
        internal const string NameRadian = "radian";
        internal const string NameDegree = "degree";
        internal const string NameMinute = "minute";
        internal const string NameGrad = "grad";

        internal const string NameUnity = "unity";
        internal const string NameUno = "uno";
        internal const string NameScalePrefixPpSpace = "parts per ";
        internal static readonly string[] NameQuantitySuffix = new[]{
            "hundred", // percent
            "thousand", // permille
            "ten thousand", // permyriad
            "million",
            "billion",
            "trillion",
            "quadrillion",
        };
        internal static readonly string[] AllScaleNames =
            new[] { NameUnity, NameUno }
            .Concat(
                NameQuantitySuffix.Select(s =>
                    String.Concat(NameScalePrefixPpSpace, s)
                )
            ).ToArray()
        ;

        internal const string NameKelvin = "kelvin";
        internal const string NameCelsius = "celsius";
        internal const string NameFahrenheit = "fahrenheit";
        internal const string NameRankine = "rankine";
        internal const string NameCelsiusFahrenheitIntermediary = "celsius fahrenheit intermediary";

    }
}
